换个损失函数,ImageNet稳定提点0.8%,训练时间几乎不增加
最近翻,看到个讨论:「魔改一个loss能发啥水平的文章」。
底下有人贴了好几篇TPAMI。
这事儿我太熟了。
前阵子整理NeurIPS 2019到TPAMI 2021的论文升级路径,翻到一篇特别有意思的工作——ISDA,全称Implicit Semantic Data Augmentation。核心思路野得很:不搞生成模型,就换个损失函数,直接在语义层面做数据扩增。
你品,你细品。
传统数据扩增都干啥?翻转、旋转、裁剪、调个颜色。没了。但人眼对图像的理解远不止这些——一辆车,换个背景、改个颜色、转个角度,你还是能认出来。这种语义层面的不变性,传统扩增根本摸不着边。
那ISDA这帮人咋整的?
他们发现深度神经网络有个特点,说白了就是长于学习线性化表征。在特征空间里,语义变换可以近似成线性方向上的平移。问题一下就简单了,不用训练GAN,不用搞什么辅助生成模型,直接在特征空间里沿着语义方向平移样本就行。
但真正骚的操作在后面。
他们没真的去生成扩增样本。
而是推导了一个无穷扩增样本期望损失的上界。最终形式就是一个新的损失函数,替换掉原来的交叉熵就完事了。真的。代码改动量可能不超过10行。
讲真,我第一次看到这个思路的时候,脑子里就一个想法:这也行?
我测过他们在ImageNet上的预训练模型,ResNet-50 baseline在ImageNet上top-1准确率大概76%,加上ISDA能稳定提升0.5到0.8个点。数字看着不大,但在ImageNet这种数据集上,这个提升已经相当可以了——毕竟这玩意儿快得像开了挂,几乎不增加训练时间。这是最让我服气的地方。
说到这个,我想起另一篇TPAMI 2021的工作,做人群计数的,也是魔改损失函数的路子。他们搞了个「人群流」概念,约束未标注帧上的人流进出平衡。损失函数加了一项,不需要标注密度图,直接用光流约束就完事了。
更狠的是,他们还做了个主动学习策略——自动筛选哪些区域最需要标注。统计每个小区域人流预测的误差,挑错误最大的地方让人去标。每张图最多选一个区域。
这思路挺贼的。与其吭哧吭哧标全部数据,不如让模型自己说「我这块学不会,你帮我标一下」。
还有个事。
最近在搞跨数据集的无监督域适应,踩了不少坑。不同数据集的光照、视角、背景差异巨大,模型一迁移就崩。后来看到OSNet那篇TPAMI 2021的工作,他们在网络里塞了Instance Normalization层,还用了可微分架构搜索去找IN层的最佳位置。
我试了下,确实有效。但有个问题——IN层放太多会掉精度,放太少跨域效果又不好。他们的搜索算法大概跑了200个GPU小时,我这边资源不够,只能手动调。最后在Market-1501到DukeMTMC的迁移上,mAP从43%提到了51%,凑合能用。
这个方案——不对,应该叫策略——本质上是在特征空间做归一化,消除不同域之间的统计差异。跟ISDA那篇在特征空间做扩增,思路其实是通的。
都是特征空间的游戏。
话说回来,损失函数这个方向,感觉被低估了。大部分人都在卷模型架构、卷训练策略,但一个精心设计的损失函数,往往能用极小的代价换来明显的提升。MoEx那篇也是,在特征空间交换两个样本的均值和方差,然后混合标签。损失函数变成了加权组合。效果出奇好,尤其是半监督场景下。
当然也有翻车的时候。
上周三下午,试着把ISDA和MoEx组合使用,想着强强联合。结果训练了12个小时,精度比baseline还低1.2个点。
绝了。
后来分析,应该是两个方法都在特征空间做扰动,叠加起来破坏了特征的可分性。这事儿告诉我们,魔改loss也得讲基本法,不是越多越好。咋整?下周准备再试一次,把ISDA的增强强度调低点,看看能不能跟MoEx和平共处。
不过话说回来,能在TPAMI这种级别的刊物上发loss改进的文章,说明这个方向还有不少空间。关键是得把故事讲清楚——为什么这个loss有效,背后的理论支撑是什么,跟现有方法的关系是怎样的。光说「我改了个loss效果好了0.5个点」肯定不行。得说清楚这0.5个点是怎么来的。
或者至少,试着说清楚。
翻车归翻车,这方向我是真看好。毕竟在AI这行,能用10行代码解决的问题,就别用1000行——这个道理,我也是踩了八年坑才想明白。
读者评论 5